-- 编码方式 utf8
vim.g.encoding = "UTF-8"
vim.o.fileencoding = "utf-8"
-- jkhl 移动时光标周围保留8行
vim.o.scrolloff = 8
vim.o.sidescrolloff = 8
-- 显示行号
vim.wo.number = true
-- 使用相对行号
vim.wo.relativenumber = true
-- 高亮所在行
vim.wo.cursorline = true
-- 显示左侧图标指示列
vim.wo.signcolumn = "yes"
-- 右侧参考线
vim.wo.colorcolumn = "160"
-- 缩进字符
vim.o.tabstop = 4
vim.bo.tabstop = 4
vim.o.softtabstop = 4
vim.o.shiftround = true
-- >> << 时移动长度
vim.o.shiftwidth = 4
vim.bo.shiftwidth = 4
-- 空格替代
vim.bo.expandtab = true
-- 新行对齐当前行
vim.o.autoindent = true
vim.bo.autoindent = true
vim.o.smartindent = true
-- 搜索大小写不敏感，除非包含大写
vim.o.ignorecase = true
vim.o.smartcase = true
-- 搜索不要高亮
vim.o.hlsearch = false
 
vim.o.incsearch = true
-- 命令模式行高
vim.o.cmdheight = 1
-- 自动加载外部修改
vim.o.autoread = true
vim.bo.autoread = true
-- 禁止折行
vim.wo.wrap = false
-- 光标在行首尾时<Left><Right>可以跳到下一行
vim.o.whichwrap = "<,>,[,]"
-- 允许隐藏被修改过的buffer
vim.o.hidden = true
-- 鼠标支持
vim.o.mouse = "a"
-- 禁止创建备份文件
vim.o.backup = false
vim.o.writebackup = false
vim.o.swapfile = false
-- smaller updatetime
vim.o.updatetime = 300
 
vim.o.timeoutlen = 500
 
vim.o.splitbelow = true
vim.o.splitright = true
-- 自动补全不自动选中
vim.g.completeopt = "menu,menuone,noselect,noinsert"
-- 样式
vim.o.background = "dark"
vim.o.termguicolors = true
vim.opt.termguicolors = true
-- 不可见字符的显示，这里只把空格显示为一个点
vim.o.list = false
vim.o.listchars = "space:·,tab:>-"
 
vim.o.wildmenu = true
 
vim.o.shortmess = vim.o.shortmess .. "c"
-- 补全显示10行
vim.o.pumheight = 10
vim.o.clipboard = "unnamedplus"





local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git",
    "clone",
    "--filter=blob:none",
    "https://github.com/folke/lazy.nvim",
    "--branch=stable", -- latest stable release
    lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)









-- Lazy.nvim 插件配置
require("lazy").setup({
    -- 安装 lualine 插件
    {
        "nvim-lualine/lualine.nvim",
        name = "lualine",  -- 指定插件名称
        config = function()
            require("lualine").setup({
                options = {
                    theme = 'catppuccin', --主题设置为“$themes”
                    section_separators = '', -- 去除分割线
                    component_separators = '',
	            globalstatus = true,
		    disabled_filetypes = { 'NvimTree', 'Lazy' },
		    section_separators = { left = '', right = '' },  -- 左右分隔符，类似 p10k 的样式
        	    component_separators = { left = '', right = '' },  -- 组件之间的分隔符
                },
                sections = {
                    lualine_a = { { 'mode', fmt = function(str) return ' ' .. str end } },  -- 模拟 p10k 的模式样式
	            lualine_b = { 'branch', 'diff' },  -- 显示 Git 分支和 diff 信息
   	    	    lualine_c = { 'filename' },  -- 显示文件名
    	   	    lualine_x = { 'encoding', 'fileformat', 'filetype' },  -- 显示编码、格式和文件类型
    	       	    lualine_y = { 'progress' },  -- 显示文件进度
    	   	    lualine_z = { { 'location', fmt = function(str) return str .. ' ' end } },  -- 模拟 p10k 位置显示
                },
            })
        end
    },
    -- 安装 catppuccin 主题插件
    {
        "catppuccin/nvim",
        name = "catppuccin",
        priority = 1000  -- 确保主题在其他插件之前加载
    },
    
    {
        "nvim-tree/nvim-tree.lua",
        name = "nvim-tree",
        dependencies = { "nvim-tree/nvim-web-devicons" },  -- 可选的文件图标插件
        config = function()
            require("nvim-tree").setup({
                -- 这里你可以根据需要自定义配置
                view = {
                    width = 30,  -- 设置文件树的宽度
                }
            })
            -- 设置快捷键打开/关闭文件树
            vim.api.nvim_set_keymap('n', '<C-n>', ':NvimTreeToggle<CR>', { noremap = true, silent = true })
        end
    },    
    
    {
      "hrsh7th/nvim-cmp",
      url = "https://kkgithub.com/hrsh7th/nvim-cmp.git", -- 自定义仓库 URL
      dependencies = {
        { "hrsh7th/cmp-nvim-lsp", url = "https://kkgithub.com/hrsh7th/cmp-nvim-lsp.git" },
        { "hrsh7th/cmp-buffer", url = "https://kkgithub.com/hrsh7th/cmp-buffer.git" },
        { "hrsh7th/cmp-path", url = "https://kkgithub.com/hrsh7th/cmp-path.git" },
        { "hrsh7th/cmp-cmdline", url = "https://kkgithub.com/hrsh7th/cmp-cmdline.git" },
  
        -- LuaSnip 相关插件
        { "L3MON4D3/LuaSnip", url = "https://kkgithub.com/L3MON4D3/LuaSnip.git" },
        { "saadparwaiz1/cmp_luasnip", url = "https://kkgithub.com/saadparwaiz1/cmp_luasnip.git" },
        { "rafamadriz/friendly-snippets", url = "https://kkgithub.com/rafamadriz/friendly-snippets.git" },  -- 友好代码片段
        { "onsails/lspkind.nvim", url = "https://kkgithub.com/onsails/lspkind.nvim.git" },
      },
      config = function()
        local cmp = require("cmp")
        local luasnip = require("luasnip")  -- 加载 LuaSnip
  
        -- 加载友好的代码片段
        require("luasnip.loaders.from_vscode").lazy_load()
  
        -- 设置 nvim-cmp
        cmp.setup({
          snippet = {
            expand = function(args)
              luasnip.lsp_expand(args.body) -- 使用 LuaSnip 作为片段引擎
            end,
          },
          mapping = cmp.mapping.preset.insert({
            ["<C-b>"] = cmp.mapping.scroll_docs(-4),
            ["<C-f>"] = cmp.mapping.scroll_docs(4),
            ["<C-Space>"] = cmp.mapping.complete(),
            ["<C-e>"] = cmp.mapping.abort(),
            ["<CR>"] = cmp.mapping.confirm({ select = true }),  -- 确认补全
            ["<Tab>"] = cmp.mapping(function(fallback)
              if luasnip.expand_or_jumpable() then
                luasnip.expand_or_jump()
              else
                fallback()
              end
            end, { "i", "s" }),
            ["<S-Tab>"] = cmp.mapping(function(fallback)
              if luasnip.jumpable(-1) then
                luasnip.jump(-1)
              else
                fallback()
              end
            end, { "i", "s" }),
          }),
          sources = cmp.config.sources({
            { name = "nvim_lsp" },
            { name = "luasnip" },  -- 使用 LuaSnip 作为补全源
          }, {
            { name = "buffer" },
            { name = "path" },
            { name = "cmdline" },
          }),
          formatting = {
            format = require("lspkind").cmp_format(), -- 使用 lspkind 格式化补全项
          },
        })
  
        -- 设置命令行模式下的补全
        cmp.setup.cmdline("/", {
          mapping = cmp.mapping.preset.cmdline(),
          sources = {
            { name = "buffer" }
          }
        })
  
        cmp.setup.cmdline(":", {
          mapping = cmp.mapping.preset.cmdline(),
          sources = {
            { name = "path" },
            { name = "cmdline" }
          }
        })
      end,
    },
  
    -- 语言服务器配置示例
    {
      "neovim/nvim-lspconfig",
      config = function()
        require("lspconfig").pyright.setup {} -- 这里可以配置任何 LSP
      end,
    },
  




})
	
	


vim.cmd.colorscheme("catppuccin")

-- 配置片段存储路径
require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/lua/snippets/" })
vim.opt.guifont = "Hack:h13:bi"  -- 设置 Hack 字体，大小13，粗体

